﻿using System;
using System.Web.UI.WebControls;
using BLL;

namespace Web.forms
{
    public partial class Distribucion : Pagina
    {
        const string sUbica = "Ubicaciones a distribuir: [CantUbicaciones]";
        
        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack) return;

            var message = "";

            if (BLL.Distribucion.ValidaPeriodo(PeriodoActual.Llave, ref message))
            {
                CargarBodegas();
                // pnlDistribucion.Visible = true;

                if (!Carga_AsignacionLideres())
                    PopUpMessage("NO SE ENCUENTRAN LIDERES DISPONIBLES.");
            }
            else
            {
                lblMensaje.Text = message;
                lblMensaje.Visible = true;
                PopUpMessage(message);
                return;
            }
        }

        private bool Carga_AsignacionLideres()
        {
            var tmpListaLideres = AsignacionLider.ObtenerLideresDisponibles(PeriodoActual.Llave);

            grvAsignacionLiderOperativos.DataSource = tmpListaLideres;
            grvAsignacionLiderOperativos.DataBind();

            grvAsignacionLiderOperativos.Visible = true;
            grvAsignacionLiderOperativos.Enabled = false;

            return tmpListaLideres.Count > 0;
        }

        public int Ubicaciones
        {
            get { return ViewState["Ubicaciones"] == null ? 0 : Convert.ToInt16(ViewState["Ubicaciones"]); }
            set { ViewState["Ubicaciones"] = value; }
        }

        public int CantidadOperativos
        {
            get { return ViewState["CantidadOperativos"] == null ? 0 : Convert.ToInt16(ViewState["CantidadOperativos"]); }
            set { ViewState["CantidadOperativos"] = value; }
        }

        public int CantidadLideres
        {
            get { return ViewState["CantidadLideres"] == null ? 0 : Convert.ToInt16(ViewState["CantidadLideres"]); }
            set { ViewState["CantidadLideres"] = value; }
        }

        protected void CargarBodegas()
        {
            Util.Common.CargaDropDownList(ref ddlBodega, BLL.Bodegas.ObtenerBodegas(), "Glosa", "BodegasId", "SELECCIONE BODEGA");
        }

        protected void btnObtenerDistribuciones_Click(object sender, EventArgs e)
        {
            CantidadOperativos = 0;
            CantidadLideres = 0;

            if (string.IsNullOrEmpty(txtPasillo.Text))
            {
                PopUpMessage("Ingrese pasillos");
                return;
            }

            if (Ubicaciones == 0)
            {
                PopUpMessage("NO EXISTEN UBICACIONES A DISTRIBUIR PARA LA BODEGA Y PASILLOS SELECCIONADOS");
                return;
            }

            foreach (GridViewRow row in grvAsignacionLiderOperativos.Rows)
            {
                var tmpTextBox = (TextBox) row.FindControl("txtCantidadOperadores");
   
                CantidadOperativos += string.IsNullOrEmpty(tmpTextBox.Text.Trim()) ? 0 : Convert.ToInt32(tmpTextBox.Text.Trim());

                if (string.IsNullOrEmpty(tmpTextBox.Text.Trim())) continue;

                CantidadLideres++;
            }

            var tmpPasillo = txtPasillo.Text.Trim().Length == 0 ? "T*" : txtPasillo.Text.Trim();

            mMensaje = "";

            var tmpDistribucionId = -99;

            var c = 1;

            if (CantidadLideres == 0 && CantidadOperativos == 0)
            {
                PopUpMessage("DEBE INGRESAR OPERATIVOS PARA AL MENOS UN LIDER");
                return;
            }

            BLL.Distribucion.GrabarDistribucion(PeriodoActual.Llave, Convert.ToInt16(ddlBodega.SelectedValue), PeriodoActual.TomaActual(Convert.ToInt16(ddlBodega.SelectedValue)), tmpPasillo, CantidadLideres, CantidadOperativos, Ubicaciones, ref tmpDistribucionId, ref mMensaje);

            foreach (GridViewRow row in grvAsignacionLiderOperativos.Rows)
            {
                var tmpLiderId = 0;
                var tmpCantidadOperadores = 0;

                if (row.FindControl("lblLiderId") != null)
                    if (!string.IsNullOrEmpty(((Label)row.FindControl("lblLiderId")).Text.Trim()))
                        tmpLiderId = Convert.ToInt16(((Label)row.FindControl("lblLiderId")).Text);

                if (row.FindControl("txtCantidadOperadores") != null)
                    if (!string.IsNullOrEmpty(((TextBox)row.FindControl("txtCantidadOperadores")).Text.Trim()))
                        tmpCantidadOperadores = Convert.ToInt16(((TextBox)row.FindControl("txtCantidadOperadores")).Text);

                var tmpLblEstado = (Anthem.Label) row.FindControl("lbEstado");

                if (tmpLblEstado != null && tmpCantidadOperadores != 0)
                {
                    tmpLblEstado.Text = "Procesando...";
                    tmpLblEstado.Visible = true;
                    tmpLblEstado.UpdateAfterCallBack = true;
                }

                if (!tmpLiderId.Equals(0) && !tmpCantidadOperadores.Equals(0))
                {
                    var tmpEstado = BLL.Distribucion.GeneraHojaRuta(tmpDistribucionId, tmpLiderId, tmpCantidadOperadores, c == CantidadLideres ? 0 : 1, ref mMensaje);

                    if (tmpEstado)
                        tmpEstado = AsignacionLider.Asignar(PeriodoActual.Llave, Convert.ToInt16(ddlBodega.SelectedValue), PeriodoActual.TomaActual(Convert.ToInt16(ddlBodega.SelectedValue)), tmpLiderId);

                    if (tmpLblEstado != null)
                        tmpLblEstado.Text = tmpEstado ? "OK" : "Procesado con error";
                }

                c++;
            }

            // grvAsignacionLiderOperativos.Visible = false;
            ddlBodega.SelectedIndex = -1;
            txtPasillo.Text = "";
            lblCantUbicaciones.Visible = false;

            PopUpMessage(mMensaje);
            return;
        }

        protected void grvDistribucion_RowDataBound(object sender, GridViewRowEventArgs e)
        {

        }

        protected void txtPasillo_TextChanged(object sender, EventArgs e)
        {
            if (ddlBodega.SelectedValue.Equals("-999"))
            {
                PopUpMessage("SELECCIONE BODEGA");
                return;
            }

            if (string.IsNullOrEmpty(txtPasillo.Text)) return;

            // Carga_AsignacionLideres();

            ActualizarCantidadUbicaciones();

            grvAsignacionLiderOperativos.Enabled = true;
        }

        protected void ActualizarCantidadUbicaciones()
        {
            Carga_AsignacionLideres();

            string tmpPasillo = null;

            if (txtPasillo.Text.Trim().Length != 0)
            {
                if (txtPasillo.Text.Trim().Length == 1)
                    tmpPasillo = txtPasillo.Text.Trim().ToUpper() + "%";
                else
                    if (txtPasillo.Text.Trim().ToUpper().Equals("T*"))
                        tmpPasillo = null;
                    else
                        tmpPasillo = txtPasillo.Text.Trim().ToUpper();
            }

            var tmpPreDistribuciones = new PreDistribuciones(PeriodoActual.Llave, Convert.ToInt16(ddlBodega.SelectedValue), PeriodoActual.TomaActual(Convert.ToInt16(ddlBodega.SelectedValue)),tmpPasillo);

            Ubicaciones = tmpPreDistribuciones.Ubicaciones;

            lblCantUbicaciones.Text = sUbica.Replace("[CantUbicaciones]", Ubicaciones.ToString());
            lblCantUbicaciones.Visible = true;

            if (!ddlBodega.SelectedValue.Equals("-999"))
                lblTomaPorBodega.Text = "Toma: " + PeriodoActual.TomaActual(Convert.ToInt16(ddlBodega.SelectedValue)).ToString();

            if (Ubicaciones == 0)
            {
                PopUpMessage("NO EXISTEN UBICACIONES A DISTRIBUIR PARA LA BODEGA Y PASILLOS SELECCIONADOS");
                return;
            }
        }
    }
}